import os
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()

class Config:
    """应用配置类"""
    
    # Flask配置
    SECRET_KEY = os.environ.get('SECRET_KEY', 'biomni-web-interface-secret-key-change-in-production')
    
    # 数据库配置
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
        'sqlite:///' + os.path.join(os.path.abspath(os.path.dirname(__file__)), 'biomni.db')
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_ENGINE_OPTIONS = {
        'pool_pre_ping': True,
        'pool_recycle': 300,
    }
    
    # Session配置
    SESSION_COOKIE_SECURE = False
    SESSION_COOKIE_HTTPONLY = True
    SESSION_COOKIE_SAMESITE = 'Lax'
    
    # JWT配置
    JWT_SECRET_KEY = SECRET_KEY
    JWT_ALGORITHM = 'HS256'
    JWT_EXPIRATION_HOURS = 24
    
    # 日志配置
    LOG_DIR = os.environ.get('LOG_DIR', 'logs')
    LOG_FILE = os.environ.get('LOG_FILE', os.path.join(LOG_DIR, 'biomni_app.log'))
    LOG_MAX_BYTES = int(os.environ.get('LOG_MAX_BYTES', '10485760'))  # 10MB
    LOG_BACKUP_COUNT = int(os.environ.get('LOG_BACKUP_COUNT', '5'))
    LOG_LEVEL = os.environ.get('LOG_LEVEL', 'INFO').upper()
    
    # 服务器配置
    FLASK_DEBUG = os.environ.get('FLASK_DEBUG', 'True').lower() == 'true'
    FLASK_HOST = os.environ.get('FLASK_HOST', '0.0.0.0')
    FLASK_PORT = int(os.environ.get('FLASK_PORT'))
    FLASK_WEB_PORT = int(os.environ.get('FLASK_WEB_PORT'))

    # API配置
    API_KEY = os.environ.get('API_KEY')
    BASE_URL = os.environ.get('BASE_URL', '').strip()
    DEFAULT_MODEL = os.environ.get('DEFAULT_MODEL', 'claude-sonnet-4-20250514')
    DATA_PATH = os.environ.get('DATA_PATH', '/Users/liuxiansen/PycharmProjects/Biomni/data')
    
    # 对话存储配置
    CONVERSATION_STORAGE_DIR = os.environ.get('CONVERSATION_STORAGE_DIR', 
                                            os.path.join(os.path.abspath(os.path.dirname(__file__)), 'conversation_data'))
    
    # 自动初始化配置
    AUTO_INITIALIZE = os.environ.get('AUTO_INITIALIZE', 'false').lower() == 'true'
    
    # 默认用户配置
    DEFAULT_ADMIN_USERNAME = os.environ.get('DEFAULT_ADMIN_USERNAME', 'admin')
    DEFAULT_ADMIN_EMAIL = os.environ.get('DEFAULT_ADMIN_EMAIL', 'admin@biomni.com')
    DEFAULT_ADMIN_PASSWORD = os.environ.get('DEFAULT_ADMIN_PASSWORD', 'admin123')
    DEFAULT_ADMIN_BALANCE = float(os.environ.get('DEFAULT_ADMIN_BALANCE', '1000.0'))
    DEFAULT_ADMIN_REQUEST_LIMIT = int(os.environ.get('DEFAULT_ADMIN_REQUEST_LIMIT', '1000'))
    
    DEFAULT_USER_USERNAME = os.environ.get('DEFAULT_USER_USERNAME', 'user1')
    DEFAULT_USER_EMAIL = os.environ.get('DEFAULT_USER_EMAIL', 'user1@example.com')
    DEFAULT_USER_PASSWORD = os.environ.get('DEFAULT_USER_PASSWORD', 'password123')
    DEFAULT_USER_BALANCE = float(os.environ.get('DEFAULT_USER_BALANCE', '100.0'))
    DEFAULT_USER_REQUEST_LIMIT = int(os.environ.get('DEFAULT_USER_REQUEST_LIMIT', '100'))
    DEFAULT_USER_REQUEST_COUNT = int(os.environ.get('DEFAULT_USER_REQUEST_COUNT', '5'))
    
    # 模型-API平台映射
    MODEL_PLATFORM_MAP = {
        # Anthropic 平台
        'claude-sonnet-4-20250514': 'anthropic',
        # OpenAI 平台
        'gpt-4.1': 'openai',
        'gpt-4o': 'openai',
        'gpt-4o-mini': 'openai'
    }

class DevelopmentConfig(Config):
    """开发环境配置"""
    DEBUG = True

class ProductionConfig(Config):
    """生产环境配置"""
    DEBUG = False
    SESSION_COOKIE_SECURE = True

class TestingConfig(Config):
    """测试环境配置"""
    TESTING = True
    SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:'

# 配置映射
config = {
    'development': DevelopmentConfig,
    'production': ProductionConfig,
    'testing': TestingConfig,
    'default': DevelopmentConfig
}